package leetcode101.greedy_strategy;

/**
 * @author Synhard
 * @version 1.0
 * @Class Code4
 * @Description 假设有一个很长的花坛，一部分地块种植了花，另一部分却没有。可是，花不能种植在相邻的地块上，它们会争夺水源，两者都会死去。
 * 给你一个整数数组flowerbed 表示花坛，由若干 0 和 1 组成，其中 0 表示没种植花，1 表示种植了花。
 * 另有一个数n ，能否在不打破种植规则的情况下种入n朵花？能则返回 true ，不能则返回 false。
 *
 * @tel 13001321080
 * @email 823436512@qq.com
 * @date 2021-03-22 14:15
 */
public class Code4 {

    public static void main(String[] args) {
        int[] flowerBed = {1,0,0, 0};
        System.out.println(canPlaceFlowers(flowerBed, 2));
    }

    public static boolean canPlaceFlowers(int[] flowerbed, int n) {
        if (flowerbed.length == 1 && flowerbed[0] == 1) {
            return n == 0;
        } else if (flowerbed.length == 1 && flowerbed[0] == 0) {
            return true;
        }
        int counter = 0;
        for (int i = 0; i < flowerbed.length; i++) {
            if (i == 0) {
                /*
                如果是开头位置的话如果开头位置是0，并且开头位置的下一个位置也是0的话就置为1
                 */
                if (flowerbed[i] != 1 && flowerbed[i + 1] != 1) {
                    flowerbed[i] = 1;
                    counter++;
                }
            } else if (i == flowerbed.length - 1) {
                /*
                如果结尾位置是0并且结尾位置的前一个也是0，就置1
                 */
                if (flowerbed[i] != 1 && flowerbed[i - 1] != 1) {
                    flowerbed[i] = 1;
                    counter++;
                }
            } else {
                /*
                如果是中间的某一个位置是0并且两边都是0就置1
                 */
                if (flowerbed[i - 1] != 1 && flowerbed[i] != 1 && flowerbed[i + 1] != 1) {
                    flowerbed[i] = 1;
                    counter++;
                }
            }
        }
        return counter >= n;
    }
}
/*
贪心策略，从左向右遍历花坛，能种的地方都种上
如果是开头位置的话如果开头位置是0，并且开头位置的下一个位置也是0的话就置为1
如果结尾位置是0并且结尾位置的前一个也是0，就置1
如果是中间的某一个位置是0并且两边都是0就置1
 */